package com.example.order.feign;


import com.example.order.config.feign.StockServiceFallbackFactory;
import com.example.order.entity.StockDTO;
import com.example.order.feign.config.BaseFeignConfig;
import com.example.order.feign.config.CommonFeignRetry;
import com.example.order.feign.config.UserInfoClientSpecification;
import feign.Request;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "stock", path = "/stock", contextId = "stockClientFeign", configuration = {BaseFeignConfig.class, UserInfoClientSpecification.class, CommonFeignRetry.class}, fallbackFactory = StockServiceFallbackFactory.class)
/*
    1. 定义一个名为"stockClientFeign"的Feign客户端，用于调用名为"stock"的服务 此处为nacos 注册的服务名
    该客户端的所有请求路径都将以"/stock"开头 通用请求路径
    如果此处设置配置类 那么此处的优先级最高
    contextId 这个参数用于设置FeignClient的名称，用于区分多个FeignClient实例 不设置会使用value作为bean的名字 导致重复 出现异常
    todo 此处现在虽然不太明白为什么 但是是重试之后再走熔断机制的 CommonFeignRetry 重试机制类
 */
public interface StockClientFeign {

    @GetMapping("/getStock")
    public String stock();


    // 若此处为get请求 并且入参是一个对象 @SpringQueryMap 会将对象中的属性转换成查询参数
    @GetMapping("/getStockDTO")
    public String getStockDTO(@SpringQueryMap StockDTO stockDTO);


    // 接口单独设置超时时间
    @GetMapping("/user-info/info/{id}")
    String getInfo(Request.Options options, @PathVariable("id") Long id);

}
